Communication between a mobile station and a base station is always affected by interference, noise and the like. Especially in the case of a digital communication, such communication errors can cause serious distortions of the use signal. Thus, in order to provide a reliable communication, the signals are coded.
Preferably, the codes used are so-called error correcting codes by which an error can be detected and corrected. Block codes are one class of error correcting codes. In block codes, a predetermined amount of bits are combined to one block and then subjected to some encoding, for example a parity check or the like. An important block code is the cyclic redundancy check (3 bit CRC), for example.
However, such a block code like the CRC alone is not adequate to identify all errors on important bits in a data stream. Consequently, it is possible that bad frames containing such bit errors are not detected which leads to decreased speech quality.
Therefore, the data are also protected by a so-called convolutional code. In convolutional codes, a stream of data bits is encoded successively by (for example) modulo-2 convolutions. The bits are coded such that a new sequence of bits is generated in which the bits are dependent on each other. This allows a more reliable decoding.
Thus, in order to provide good speech quality, the block code and the convolutional code are applied simultaneously.
In the following an example for the coding of speech frames is described with respect to FIG. 3. In GSM (Global System for Mobile Communications) the speech channel at half rate (TCH/HS) is coded in the following way: A speech coder supplies a sequence of blocks of data to a channel encoder, each block of data corresponding to one speech frame. The bits of such a data block are divided into two classes, i.e., class 1 bits and class 2 bits. Class 1 comprises protected bits, whereas class 2 comprises unprotected bits. Class 1 is further subdivided into a class 1a and a class 1b. Class 1a bits are protected by a cyclic code and a convolutional code, whereas class 1b bits are protected by the convolutional code only. Thus, the class la bits are the most important bits in the data block.
The channel encoder performs a parity check (using CRC) and the like in order to protect the class la bits. Thereafter, the class 1 bits (i.e., class 1a bits and class 1b bits) are encoded with a punctured convolutional code. On the receiver side, the received coded data are decoded.
By such a code, a lot of transmission errors can be detected and corrected. Thus, a highly reliable communication can be provided.
However, there is always the possibility of errors to such an extent that these errors can be detected but are not correctable, e.g., since too many bits were affected during the transmission. In this case, a corresponding data block (frame) has to be indicated. This is referred to as the so-called bad frame indication (BFI).
By this procedure, a BFI flag is set in the data block. When the BFI flag is active, a successive device knows that this particular speech frame is not usable. Thus, a voice output, for example, is avoided.
The conventional bad frame indication (BFI) algorithms have the drawback that they are inflexible such that they cannot respond to changing conditions on a communication channel.
This leads to the drawback of a large amount of incorrect decisions. That is, some bad frames are not detected and thus, on the other hand, some frames are marked as bad frames although they do not comprise a communication error.